package DieSiedler;

/**
 * Mithilfe der Spieloptionen kann eine beliebige Anzahl neuer Kartenstrukturen eines bestimmten Typs generiert werden.
 * @author Sebastian Kummer
 *
 */
public class SpielOptionen {
	
	private int dimension;
	
	private int maxSpieler;
	
	private int siegesPunkte;
	
	private KartenTyp kartentyp;
	
	private Kartenstruktur karte;
	
	private double percentage;
	
	
	SpielOptionen(int dimension, int maxSpieler, int siegesPunkte, KartenTyp kartentyp) throws IllegalArgumentException{
		this(dimension, maxSpieler, siegesPunkte, kartentyp, null);		
	}
	
	SpielOptionen(int dimension, int maxSpieler, int siegesPunkte, KartenTyp kartentyp, double percentage) throws IllegalArgumentException{
		this(dimension, maxSpieler, siegesPunkte, kartentyp, percentage, null);		
	}
	
	SpielOptionen(int dimension, int maxSpieler, int siegesPunkte, KartenTyp kartentyp, Kartenstruktur karte) throws IllegalArgumentException{
		this(dimension, maxSpieler, siegesPunkte, kartentyp, 75.0, karte);	
	}
	
	SpielOptionen(int dimension, int maxSpieler, int siegesPunkte, KartenTyp kartentyp, double percentage, Kartenstruktur karte) throws IllegalArgumentException{
		
		if(dimension <= 0){
			throw new IllegalArgumentException();
		}
		if(maxSpieler <= 0){
			throw new IllegalArgumentException();
		}
		if(siegesPunkte <= 0){
			throw new IllegalArgumentException();
		}
		if(percentage < 0.0){
			throw new IllegalArgumentException();
		}
		if(kartentyp == KartenTyp.Vorgegeben && karte == null){
			throw new IllegalArgumentException();
		}
		
		this.dimension = dimension;
		this.maxSpieler = maxSpieler;
		this.siegesPunkte = siegesPunkte;
		this.kartentyp = kartentyp;
		this.karte = karte;
		this.percentage = percentage;
	}
	
	public int getDimension(){
		return dimension;
	}
	
	public int getMaxSpieler(){
		return maxSpieler;
	}
	
	public int getSiegesPunkte(){
		return siegesPunkte;
	}
	
	public KartenTyp getKartenTyp(){
		return kartentyp;
	}
	
	public Kartenstruktur getKarte(){
		return karte;
	}
	
	public double getPercentage(){
		return percentage;
	}

}
